import axios, { AxiosError, type AxiosRequestHeaders, type AxiosResponse } from 'axios'
import { ElMessage, ElMessageBox } from 'element-plus'
/* 定义response对象的data接口 */  
interface ResponseData<T> {  
  code: number;  
  data: T;  
  message: string;  
}  

// 配置新建一个 axios 实例  
const service1 = axios.create({  
  baseURL: '/api', // 替换为你的实际基础 URL  
  timeout: 5000 // 设置请求超时为 5000 毫秒（5 秒）  
});  

// 添加请求拦截器  
service1.interceptors.request.use((config) => {  
  const token = sessionStorage.getItem('Authorization');  
  const company = sessionStorage.getItem('company');  
  const lang = sessionStorage.getItem('lang');  
  (config.headers as AxiosRequestHeaders)['Content-Type'] = `application/json`; // 确保添加 Bearer 前缀
  if (token) {  
    (config.headers as AxiosRequestHeaders).Authorization = `Bearer ${token}`; // 确保添加 Bearer 前缀  
     
  }  
  
  if (company && company !== 'undefined') {  
    (config.headers as AxiosRequestHeaders).company = JSON.parse(company)[0].code;  
    (config.headers as AxiosRequestHeaders).version = 'tzf';  
  }  
  
  if (lang && lang !== 'undefined') {  
    (config.headers as AxiosRequestHeaders)['Accept-Language'] = JSON.parse(lang);  
  }  
  
  return config;  
});  

// 添加响应拦截器  
service1.interceptors.response.use(  
  (response: AxiosResponse<ResponseData<any>>) => {  
    const res = response.data;  
    
    // 判断是否需要重新登录  
    if (res.code === 3) {  
      ElMessage.warning('登录超时，请重新登录');  
      sessionStorage.removeItem('Authorization');  
      setTimeout(() => {  
        window.location.href = '/login';  
      }, 1000);  
    }  
    
    return res; // 返回响应数据  
  },  
  (error: AxiosError) => {  
    // 处理请求错误  
    let message = '请求失败，请稍后重试';  
    if (error.response) {  
      // 如果服务器返回了错误响应  
      message = error.response.data?.message || message;  
    }  
    
    ElMessage.error(message); // 显示错误消息  
    return Promise.reject(error); // 抛出错误以供调用者处理  
  }  
);  

// 封装获取图片的方法  
export const fetchImages = async () => {  
  try {  
    const response: ResponseData<any> = await service1.get('/your-endpoint'); // 替换为你的具体 API endpoint  
    return response.data; // 返回响应数据中的 data 部分  
  } catch (error) {  
    console.error('Error fetching images:', error);  
    throw error; // 抛出异常以供调用者处理  
  }  
};  

export default service1; // 导出 Axios 实例  